/* * Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.demo.s3uploader; import android.content.SharedPreferences; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicSessionCredentials; /** * This utility class is used to store content in Android's Shared Preferences. For maximum security the preferences should be private. */ public class AmazonSharedPreferencesWrapper { private static final String AWS_ACCESS_KEY = "AWS_ACCESS_KEY"; private static final String AWS_SECRET_KEY = "AWS_SECRET_KEY"; private static final String AWS_SECURITY_TOKEN = "AWS_SECURITY_TOKEN"; private static final String AWS_EXPIRATION_DATE = "AWS_EXPIRATION_DATE"; private static final String AWS_DEVICE_UID = "AWS_DEVICE_UID"; private static final String AWS_DEVICE_KEY = "AWS_DEVICE_KEY"; private static final String AWS_DEVICE_USERNAME = "AWS_DEVICE_USERNAME"; /** * Set all of the Shared Preferences used by the Token Vending Machine to null. This function is useful if the user needs/wants to log out to * clear any user specific information. */ public static void wipe( SharedPreferences sharedPreferences ) { AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_UID, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_KEY, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_ACCESS_KEY, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_SECRET_KEY, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_SECURITY_TOKEN, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_EXPIRATION_DATE, null ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_USERNAME, null ); } /** * Stores the username that was registered in the Shared Preferences. */ public static void storeUsername( SharedPreferences sharedPreferences, String username ) { AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_USERNAME, username ); } /** * Returns the current UID stored in Shared Preferences. */ public static String getUsername( SharedPreferences sharedPreferences ) { return AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_DEVICE_USERNAME ); } /** * Stores the UID and Key that were registered in the Shared Preferences. The UID and Key and used to encrypt/decrypt the Token that is returned * from the Token Vending Machine. */ public static void registerDeviceId( SharedPreferences sharedPreferences, String uid, String key ) { AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_UID, uid ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_DEVICE_KEY, key ); } /** * Returns the current UID stored in Shared Preferences. */ public static String getUidForDevice( SharedPreferences sharedPreferences ) { return AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_DEVICE_UID ); } /** * Returns the current Key stored in Shared Preferences. */ public static String getKeyForDevice( SharedPreferences sharedPreferences ) { return AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_DEVICE_KEY ); } /** * Gets the AWS Access Key, AWS Secret Key and Security Token currently stored in Shared Preferences. Then creates a Credentials object and * returns that object. */ public static AWSCredentials getCredentialsFromSharedPreferences( SharedPreferences sharedPreferences ) { String accessKey = AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_ACCESS_KEY ); String secretKey = AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_SECRET_KEY ); String securityToken = AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_SECURITY_TOKEN ); return new BasicSessionCredentials( accessKey, secretKey, securityToken ); } /** * Checks if the current Token's expiration date stored in Shared Preferences has expired. A token that has expired or will expire in fifteen * minutes or less is considered expired. */ public static boolean areCredentialsExpired( SharedPreferences sharedPreferences ) { String expirationDate = AmazonSharedPreferencesWrapper.getValueFromSharedPreferences( sharedPreferences, AWS_EXPIRATION_DATE ); if ( expirationDate == null ) { return true; } else { long timeInSeconds = Long.parseLong( expirationDate ); return ( timeInSeconds < ( System.currentTimeMillis() + 15 * 60 * 100 ) ); } } /** * Stores the four pieces of information associated with a Token in the Shared Preferences. */ public static void storeCredentialsInSharedPreferences( SharedPreferences sharedPreferences, String accessKey, String secretKey, String securityToken, String expirationDate ) { AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_ACCESS_KEY, accessKey ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_SECRET_KEY, secretKey ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_SECURITY_TOKEN, securityToken ); AmazonSharedPreferencesWrapper.storeValueInSharedPreferences( sharedPreferences, AWS_EXPIRATION_DATE, expirationDate ); } protected static void storeValueInSharedPreferences( SharedPreferences sharedPreferences, String key, String value ) { SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString( key, value ); editor.commit(); } protected static String getValueFromSharedPreferences( SharedPreferences sharedPreferences, String key ) { return sharedPreferences.getString( key, null ); } }